#-----------------------------[知乎：叶枝黎曼]-------------------------------
'''
有 N 种物品和一个容量是 V 的背包。

第 i 种物品最多有 si 件，每件体积是 vi，价值是 wi。

求解将哪些物品装入背包，可使物品体积总和不超过背包容量，且价值总和最大。
输出最大价值。

输入格式
第一行两个整数，N，V (0<N≤1000, 0<V≤20000)，用空格隔开，分别表示物品种数和背包容积。

接下来有 N 行，每行三个整数 vi,wi,si，用空格隔开，分别表示第 i 种物品的体积、价值和数量。

输出格式
输出一个整数，表示最大价值。

数据范围
0<N≤1000
0<V≤20000
0<vi,wi,si≤20000
提示
本题考查多重背包的单调队列优化方法。

输入样例
4 5
1 2 3
2 4 1
3 4 3
4 5 2
输出样例：
10
'''
from copy import deepcopy

n,m = map(int,input().split())
f = [0]*(m + 1)
queue = [0]*(m + 1)
for i in range(n):
    v,w,s = map(int,input().split())
    pre=  deepcopy(f)
    for j in range(v):
        head = 0
        tail = -1
        for k in range(j,m + 1 ,v):
            while head <= tail and k - s*v > queue[head]:
                head += 1
            while head <= tail and pre[queue[tail]] - (queue[tail] - j)//v*w <= pre[k] - (k - j)//v*w:
                tail -= 1
            if head <= tail:
                f[k] = max(f[k],pre[queue[head]] + (k - queue[head])//v * w)

            tail+= 1
            queue[tail] = k

print(f[m])
